// import { use } from "react"; // 官方提供的use
const getMessage = Promise.resolve("hello world");
function App() {
  // 使用use这个hook处理promise,并获取promise 的值
  const data = use(getMessage);
  return <div>{data}</div>;
}
export default App;
// 自己实现use
function use(promise) {
  // 如果传入的不是promise,则什么都不做，直接返回参数的值
  if (!(promise instanceof Promise)) {
    return promise;
  }
  // 给promise,自定义status属性，根据改属性，进行不同处理

  // 第一次，进入的时候 promise.status为underfined, 会走入default
  // 向外抛一个promise，给App
  // 该promise,出结果之后，会再次渲染App
  // 再次进入use,进入 fulfilled 或者 reject
  switch (promise.status) {
    //如果Promise已经完成，则返回结果
    case "fulfilled":
      return promise.value;
    //如果Promise已经拒绝，抛出错误
    case "rejected":
      throw promise.reason;
    default:
      // throw,因为外面是用catch来捕获
      throw promise.then(
        //成功回调，设置状态为完成，并且保存结果
        (value) => {
          promise.status = "fulfilled";
          promise.value = value;
        },
        //失败回调，设置状态为拒绝，并且保存错误的原因
        (reason) => {
          promise.status = "rejected";
          promise.reason = reason;
        }
      );
  }
}
